package com.lollipop.checkin.controller;

import com.lollipop.checkin.dto.CheckInRequest;
import com.lollipop.checkin.dto.CheckInResponse;
import com.lollipop.checkin.service.CheckInService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 签到控制器
 * 处理签到相关的HTTP请求
 */
@RestController
@RequestMapping("/api/checkin")
public class CheckInController {

    @Autowired
    private CheckInService checkInService;

    /**
     * 用户签到
     *
     * @param request 签到请求
     * @return 签到响应
     */
    @PostMapping
    public CheckInResponse checkIn(@RequestBody CheckInRequest request) {
        return checkInService.checkIn(request);
    }

    /**
     * 获取用户签到记录
     *
     * @param userId 用户ID
     * @return 签到记录（日期列表）
     */
    @GetMapping("/records/{userId}")
    public List<String> getUserCheckInRecords(@PathVariable("userId") String userId) {
        return checkInService.getUserCheckInRecords(userId);
    }

    /**
     * 获取用户连续签到天数
     *
     * @param userId 用户ID
     * @return 连续签到天数
     */
    @GetMapping("/continue-days/{userId}")
    public int getUserContinueCheckInDays(@PathVariable("userId") String userId) {
        return checkInService.getUserContinueCheckInDays(userId);
    }

    /**
     * 获取用户总签到天数
     *
     * @param userId 用户ID
     * @return 总签到天数
     */
    @GetMapping("/total-days/{userId}")
    public int getUserTotalCheckInDays(@PathVariable("userId") String userId) {
        return checkInService.getUserTotalCheckInDays(userId);
    }

    /**
     * 获取活动签到人数
     *
     * @param activityId 活动ID
     * @return 签到人数
     */
    @GetMapping("/activity-participants/{activityId}")
    public long getActivityCheckInUsersCount(@PathVariable("activityId") String activityId) {
        return checkInService.getActivityCheckInUsersCount(activityId);
    }

    /**
     * 重置用户签到数据
     * （仅用于测试和特殊情况）
     *
     * @param userId 用户ID
     * @return 是否重置成功
     */
    @DeleteMapping("/reset/{userId}")
    public boolean resetUserCheckInData(@PathVariable("userId") String userId) {
        return checkInService.resetUserCheckInData(userId);
    }
}